import { IPSModelObject } from '../ipsmodel-object';
import { IPSObject } from '../ipsobject';
import { IPSSysMsgTempl } from '../msg/ipssys-msg-templ';
import { IPSLanguageRes } from '../res/ipslanguage-res';
import { IPSWFLink } from './ipswflink';
import { IPSWFProcessParam } from './ipswfprocess-param';
import { IPSWFWorkTime } from './ipswfwork-time';

/**
 *
 * 子接口类型识别属性[wFProcessType]
 * @export
 * @interface IPSWFProcess
 */
export interface IPSWFProcess extends IPSObject, IPSModelObject {
  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 高度
   * @type {number}
   */
  height: number;

  /**
   * 左侧位置
   * @type {number}
   */
  leftPos: number;

  /**
   * 逻辑名称
   * @type {string}
   */
  logicName: string;

  /**
   * 名称语言资源
   *
   * @type {IPSLanguageRes}
   */
  getNamePSLanguageRes(): IPSLanguageRes | null;

  /**
   * 名称语言资源
   *
   * @type {IPSLanguageRes}
   */
  get namePSLanguageRes(): IPSLanguageRes | null;

  /**
   * 名称语言资源（必须存在）
   *
   * @type {IPSLanguageRes}
   */
  getNamePSLanguageResMust(): IPSLanguageRes;

  /**
   * 通知消息模板
   *
   * @type {IPSSysMsgTempl}
   */
  getPSSysMsgTempl(): IPSSysMsgTempl | null;

  /**
   * 通知消息模板
   *
   * @type {IPSSysMsgTempl}
   */
  get psSysMsgTempl(): IPSSysMsgTempl | null;

  /**
   * 通知消息模板（必须存在）
   *
   * @type {IPSSysMsgTempl}
   */
  getPSSysMsgTemplMust(): IPSSysMsgTempl;

  /**
   * 处理连出集合
   *
   * @type {IPSWFLink[]}
   */
  getPSWFLinks(): IPSWFLink[] | null;

  /**
   * 处理连出集合
   *
   * @type {IPSWFLink[]}
   */
  get psWFLinks(): IPSWFLink[] | null;

  findPSWFLink(objKey: any): IPSWFLink | null;

  /**
   * 处理参数集合
   *
   * @type {IPSWFProcessParam[]}
   */
  getPSWFProcessParams(): IPSWFProcessParam[] | null;

  /**
   * 处理参数集合
   *
   * @type {IPSWFProcessParam[]}
   */
  get psWFProcessParams(): IPSWFProcessParam[] | null;

  findPSWFProcessParam(objKey: any): IPSWFProcessParam | null;

  /**
   * 流程工作时间
   *
   * @type {IPSWFWorkTime}
   */
  getPSWFWorkTime(): IPSWFWorkTime | null;

  /**
   * 流程工作时间
   *
   * @type {IPSWFWorkTime}
   */
  get psWFWorkTime(): IPSWFWorkTime | null;

  /**
   * 流程工作时间（必须存在）
   *
   * @type {IPSWFWorkTime}
   */
  getPSWFWorkTimeMust(): IPSWFWorkTime;

  /**
   * 处理超时时长
   * @type {number}
   */
  timeout: number;

  /**
   * 动态超时时长存放属性
   * @type {string}
   */
  timeoutField: string;

  /**
   * 处理超时单位
   * @description 值模式 [流程超时类型] {MINUTE：分钟、 HOUR：小时、 DAY：天、 WORKDAY：工作日 }
   * @type {( string | 'MINUTE' | 'HOUR' | 'DAY' | 'WORKDAY')}
   */
  timeoutType: string | 'MINUTE' | 'HOUR' | 'DAY' | 'WORKDAY';

  /**
   * 上方位置
   * @type {number}
   */
  topPos: number;

  /**
   * 处理数据
   * @type {string}
   */
  userData: string;

  /**
   * 处理数据2
   * @type {string}
   */
  userData2: string;

  /**
   * 流程处理类型
   * @description 值模式 [云系统流程处理类型（全部）] {START：开始、 END：结束、 PROCESS：常规处理、 INTERACTIVE：交互处理、 EMBED：嵌套子流程、 EXCLUSIVEGATEWAY：排它网关、 INCLUSIVEGATEWAY：包容网关、 PARALLELGATEWAY：并行网关、 CALLORGACTIVITY：调用组织流程 }
   * @type {( string | 'START' | 'END' | 'PROCESS' | 'INTERACTIVE' | 'EMBED' | 'EXCLUSIVEGATEWAY' | 'INCLUSIVEGATEWAY' | 'PARALLELGATEWAY' | 'CALLORGACTIVITY')}
   */
  wFProcessType: string | 'START' | 'END' | 'PROCESS' | 'INTERACTIVE' | 'EMBED' | 'EXCLUSIVEGATEWAY' | 'INCLUSIVEGATEWAY' | 'PARALLELGATEWAY' | 'CALLORGACTIVITY';

  /**
   * 流程步骤值
   * @type {string}
   */
  wFStepValue: string;

  /**
   * 宽度
   * @type {number}
   */
  width: number;

  /**
   * 异步处理
   * @type {boolean}
   */
  asynchronousProcess: boolean;

  /**
   * 启用处理超时
   * @type {boolean}
   */
  enableTimeout: boolean;

  /**
   * 开始处理
   * @type {boolean}
   */
  startProcess: boolean;

  /**
   * 终止处理
   * @type {boolean}
   */
  terminalProcess: boolean;
}
